package cn.com.bluemoon.daps.sync.core.sync.sql.mysql.datatype.date;

import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.time.DateUtils;

import java.util.Collections;
import java.util.Set;

/**
 * @author Jarod.Kong
 * @date 2021/7/22 11:14
 */
@Slf4j
public class TimestampDataType extends DateAndTimeDataType {

    public static final String[] PARSE_DATE_TIME_PATTERN = {
            "yyyy-MM-dd hh:mm:ss",
            "YYYY-MM-dd hh:mm:ss",
            "yyyy-MM-dd'T'HH:mm:ss.SSS",
            "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
    };

    /**
     * 默认值处理
     * 是否加单引号 等
     *
     * @param defaultValue source
     * @return target
     */
    @Override
    public Object cast(Object defaultValue) {
        if (defaultValue == null) {
            return null;
        }
        try {
            // 解析通过说明是字符串的日期时间格式
            DateUtils.parseDate(defaultValue.toString(), PARSE_DATE_TIME_PATTERN);
            return wrapper(defaultValue, SINGLE_QUOTE);
        } catch (Exception e) {
            log.debug("解析{}类型的默认值异常，返回原值{}", name(), defaultValue);
            return defaultValue;
        }
    }

    @Override
    public Set<String> name() {
        return Collections.singleton("timestamp");
    }
}
